package model

const (
	AppHostStatusActivated = 1 // 正常
	AppHostMaintain        = 2 // 维护
	AppHostStatusDisabled  = 3 // 禁用

)

type AppHost struct {
	HostId         int64  `json:"hostId,string" gorm:"primaryKey"` // 客户端ID，长连接建立时会将基础信息发送给服务端，然后服务端校验信息后返回客户端ID
	HostName       string `json:"hostName"`
	IP             string `json:"ip"`
	MAC            string `json:"mac"`
	Domain         string `json:"domain"`         // eg:WORKGROUP, 域
	PartOfDomain   bool   `json:"partOfDomain"`   // eg:false, 计算机是否入域
	SystemType     string `json:"systemType"`     // eg；x64-based PC ，系统类型
	BuildNumber    string `json:"buildNumber"`    // eg : 19043 .操作系统的构建号,它比产品发布版本号更精确的版本信息。
	OSArchitecture string `json:"osArchitecture"` // eg: 64位 ，操作系统位数
	Version        string `json:"version"`        // eg:10.0.19043 ,系统版本号
	SerialNumber   string `json:"serialNumber"`   // eg:00330-80191-48344-AA161, 操作系统产品序列号。
	RdpPort        uint   `json:"rdpPort"`
	CPUInfo        string `json:"cpuInfo"`
	MemoryInfo     string `json:"memoryInfo"`
	LogicDiskInfo  string `json:"logicDiskInfo"`

	Status       int   `json:"status"` // 状态 ，1-正常，2-维护，3-禁用
	ClusterID    int64 `json:"clusterID,string"`
	BindUserID   int64 `json:"bindUserID,string"`
	LockedUserID int64 `json:"lockedUserID"`
	CreatedAt    int64 `json:"createdAt,string" gorm:"autoCreateTime"`

	CpuPercent    float64 `json:"cpuPercent" gorm:"-"`
	MemoryPercent float64 `json:"memoryPercent" gorm:"-"`
}

func (r *AppHost) TableName() string {
	return "va_host"
}

// Equals 相当于 java中的Equals()
func (r AppHost) Equals(h AppHost) bool {
	return r.HostName == h.HostName && r.IP == h.IP && r.MAC == h.MAC
}

// HostSort 实现自定义排序方方法
type HostSort []AppHost

func (s HostSort) Len() int {
	//返回传入数据的总数
	return len(s)
}
func (s HostSort) Swap(i, j int) {
	//两个对象满足Less()则位置对换
	//表示执行交换数组中下标为i的数据和下标为j的数据
	s[i], s[j] = s[j], s[i]
}
func (s HostSort) Less(i, j int) bool {
	//按字段比较大小,此处是升序排序
	//返回数组中下标为i的数据是否小于下标为j的数据
	if s[i].CpuPercent == s[j].CpuPercent {
		return s[i].MemoryPercent < s[j].MemoryPercent
	} else {
		return s[i].CpuPercent < s[j].CpuPercent
	}
}

// HostStatus 主机状态，其他要查询主机状态的接口都用这个结构体附加属性
type HostStatus struct {
	AppHost  AppHost `json:"appHost"`
	IsOnline int     `json:"isOnline"`
}

// HostDetail 主机详情，单体主机详情查询使用这个结构体
type HostDetail struct {
	AppHost  AppHost `json:"appHost"`
	IsOnline int     `json:"isOnline"`
}
